var myutil = require("./myutil.js");
var myutil = require("./myutil.js");
//优先从缓存加载,比如 myutil.js已经被加载过,再次加载直接从缓存获取不在执行
//所以这里不会重复加载
//可以拿到其中的接口对象，但是不会重复执行里面的代码
//这样做的目的是为了避免重复加载，提高模块加载效率

///////////////////////////////////////////////////////////////////
//路径形式的模块：
	//比如require("./myutil.js");
	//  ./ 当前目录，不可省略
	//  ../ 上一级目录，不可省略
	//  /xxx 几乎不用
	//  d:/a/foo.js 几乎不用
	//  首位的 / 在这里表示的是当前文件模块所属磁盘根路径
	//  .js 后缀名可以省略
//核心模块
	//核心模块文件已经被编译到了二进制文件node程序中了，我们只需要按照名字来加载就可以了
	//比如 require("fs");
//第三方模块
	//凡是第三方模块都必须通过 npm 来下载
	//通过 require('包名') 的方式来进行加载才可以使用
	//不可能有任何一个第三方包和核心模块的名字是一样的
	// 既不是核心模块、也不是路径形式的模块
		//先找到当前文件所处目录中的 node_modules 目录
		//node_modules/art-template
		//node_modules/art-template/package.json 文件
		//node_modules/art-template/package.json 文件中的 main 属性
		//main 属性中就记录了 art-template 的入口模块
		//然后加载使用这个第三方包
		//实际上最终加载的还是文件
		
		//如果 package.json 文件不存在或者 main 指定的入口模块是也没有
		//则 node 会自动找该目录下的 index.js
		//也就是说 index.js 会作为一个默认备选项
		//
		//如果以上所有任何一个条件都不成立，则会进入上一级目录中的 node_modules 目录查找
		//如果上一级还没有，则继续往上上一级查找
		//。。。
		//如果直到当前磁盘根目录还找不到，最后报错：
		//  can not find module xxx
		
// 注意：我们一个项目有且只有一个 node_modules，放在项目根目录中，这样的话项目中所有的子目录中的代码都可以加载到第三方包
// 不会出现有多个 node_modules
// 模块查找机制
//    优先从缓存加载
//    核心模块
//    路径形式的文件模块
//    第三方模块
//      node_modules/art-template/
//      node_modules/art-template/package.json
//      node_modules/art-template/package.json main
//      index.js 备选项
//      进入上一级目录找 node_modules
//      按照这个规则依次往上找，直到磁盘根目录还找不到，最后报错：Can not find moudle xxx
//    一个项目有且仅有一个 node_modules 而且是存放到项目的根目录